package comportamento.redeneural;

import comportamento.neuronio.INeuronio;

public interface IRedeNeural {

	INeuronio criarNeuronio();

	INeuronio criarNeuronioMP(double limiar);

	INeuronio criarNeuronioGenerico(double limiar, int funcaoAtivacao);

	INeuronio criarNeuronio(int funcaoAtivacao);

	INeuronio criarNeuronio(Class<? extends INeuronio> neuronioConcreto);

	INeuronio criarNeuronio(Class<? extends INeuronio> neuronioConcreto, int funcaoAtivacao);

	double[] estimular(double[] estimulos);

	void treinar(double[] entradas, double[] saidas);    

	void adicionarCamadaNeural(ICamadaNeural camada);

	void criarCamadaNeural(int quantidadeNeuronios, int tipoNeuronio);

	void criarCamadasNeurais(int quantidadeCamadas, int[] quantidadeNeuronios, int[] tiposNeuronios, double[] limiares) throws IllegalArgumentException;

	void removerCamadaNeural(ICamadaNeural camada);

	ICamadaNeural primeiraCamada();

	ICamadaNeural ultimaCamada();

	ICamadaNeural proximaCamada();

	boolean temCamadas();

	ICamadaNeural camadaNeural();
}
